//
//  IMAdStrategyModels.h
//  DualMediationSDK
//
//  广告策略相关模型
//  Created by YeJary on 2025/7/15.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

/**
 * 广告策略请求模型
 */
@interface IMAdStrategyRequest : NSObject

/**
 * 应用ID（必选）
 */
@property (nonatomic, strong) NSString *app_id;

/**
 * 用户唯一ID（必选）
 */
@property (nonatomic, strong) NSString *uuid;

/**
 * 便利构造方法
 * @param appId 应用ID
 * @param uuid 用户唯一ID
 */
+ (instancetype)requestWithAppId:(NSString *)appId uuid:(NSString *)uuid;

/**
 * 转换为请求参数字典
 */
- (NSDictionary *)toDictionary;

@end

/**
 * 广告条件模型
 */
@interface IMAdCondition : NSObject

/**
 * 当前等级
 */
@property (nonatomic, strong, nullable) NSNumber *cur_level;

/**
 * 等级间隔
 */
@property (nonatomic, strong, nullable) NSNumber *level_interval;

/**
 * AdMob优先
 */
@property (nonatomic, strong, nullable) NSNumber *ad_mob_first;

/**
 * 其他扩展条件（支持动态字段）
 */
@property (nonatomic, strong, nullable) NSDictionary *additionalConditions;

/**
 * 从字典创建实例
 * @param dictionary 条件数据字典
 */
+ (instancetype)conditionFromDictionary:(NSDictionary *)dictionary;

@end

/**
 * 广告策略模型
 */
@interface IMAdStrategy : NSObject

/**
 * 比例
 */
@property (nonatomic, assign) NSInteger rate;

/**
 * 策略ID
 */
@property (nonatomic, strong) NSString *strategy_id;

/**
 * 广告状态 1:广告开启 0:广告关闭
 */
@property (nonatomic, assign) NSInteger ad_status;

/**
 * 广告条件
 */
@property (nonatomic, strong, nullable) IMAdCondition *ad_cond;

/**
 * 从字典创建实例
 * @param dictionary 策略数据字典
 */
+ (instancetype)strategyFromDictionary:(NSDictionary *)dictionary;

@end

/**
 * 广告场景策略模型
 */
@interface IMAdSceneStrategy : NSObject

/**
 * 场景名称
 */
@property (nonatomic, strong) NSString *scene_name;

/**
 * 场景描述
 */
@property (nonatomic, strong) NSString *scene_desc;

/**
 * 国家/地区
 */
@property (nonatomic, strong) NSString *country;

/**
 * 用户类型 1:新用户 2:老用户 3:全用户
 */
@property (nonatomic, assign) NSInteger user_type;

/**
 * 策略列表
 */
@property (nonatomic, strong) NSArray<IMAdStrategy *> *strategy;

/**
 * 从字典创建实例
 * @param dictionary 场景策略数据字典
 */
+ (instancetype)sceneStrategyFromDictionary:(NSDictionary *)dictionary;

@end

/**
 * 广告策略响应模型
 */
@interface IMAdStrategyResponse : NSObject

/**
 * 响应状态码
 */
@property (nonatomic, assign) NSInteger code;

/**
 * 响应消息
 */
@property (nonatomic, strong) NSString *message;

/**
 * 响应数据 - 广告场景策略数组
 */
@property (nonatomic, strong, nullable) NSArray<IMAdSceneStrategy *> *data;

/**
 * 是否成功
 */
@property (nonatomic, assign, readonly) BOOL isSuccess;

/**
 * 从字典创建实例
 * @param dictionary 响应字典
 */
+ (instancetype)responseFromDictionary:(NSDictionary *)dictionary;

@end

/**
 * SDK启动配置模型
 */
@interface IMSDKStartupConfig : NSObject

/**
 * 日志开关
 */
@property (nonatomic, strong, nullable) NSNumber *sdk_config_log;

/**
 * 新老用户分界天数
 */
@property (nonatomic, strong, nullable) NSNumber *sdk_config_new_user_day;

/**
 * 用户分层开关
 */
@property (nonatomic, strong, nullable) NSNumber *sdk_config_user_switch;

/**
 * 美国CCPA隐私弹窗
 */
@property (nonatomic, strong, nullable) NSNumber *sdk_config_us_privacy;

/**
 * Adjust买量事件
 */
@property (nonatomic, strong, nullable) NSString *sdk_config_adjust_event;

/**
 * 聚合类型
 */
@property (nonatomic, strong, nullable) NSString *sdk_config_sdk_type;

/**
 * 广告展示行为上报
 */
@property (nonatomic, strong, nullable) NSNumber *sdk_config_ad_track;

/**
 * 广告加载行为上报
 */
@property (nonatomic, strong, nullable) NSNumber *sdk_config_ad_load_track;

/**
 * FB广告展示控制
 */
@property (nonatomic, strong, nullable) NSString *sdk_config_fb_ctl;

/**
 * FB关卡买量事件
 */
@property (nonatomic, strong, nullable) NSString *sdk_config_fb_level_event;

/**
 * 创建默认配置
 */
+ (instancetype)defaultConfig;

/**
 * 从字典创建实例
 * @param dictionary 配置数据字典
 */
+ (instancetype)configFromDictionary:(NSDictionary *)dictionary;

/**
 * 从字典创建实例（别名方法）
 * @param dictionary 配置数据字典
 */
+ (instancetype)configWithDictionary:(NSDictionary *)dictionary;

/**
 * 验证配置是否有效
 */
- (BOOL)isValid;

/**
 * 获取配置描述
 */
- (NSString *)configDescription;

/**
 * 转换为字典
 */
- (NSDictionary *)toDictionary;

@end

NS_ASSUME_NONNULL_END